#include <stdio.h>
//输入一个二进制 返回的就是一个整数
int turn(int  n)//定义二进制转换函数为turn
{

if(n==0)
{
​    return n;
}
else
{
​    return turn(n/10)*2+n%10;
}

}
add(long x,long y)
{
    while(y!=0)
    {
​    long z=(x & y)<< 1;
​    x^=y;
​    y=z;
}return x;

}
int dectobin(int n)
{
    int sum = 0;
    int y, x = 1; // y表示余数，x为叠加的系数
    while (n != 0)
    {
        y = n % 2;
        sum += x * y;
        x *= 10;
        n /= 2;
    }
    return sum;
}
int sub(int a, int b)//两个数字相减，相加减后 -1 1
{
    return add(a, add(~b, 1));
}

int main()
{

int n=0;
printf("请输入要运算的数据的组数:");
scanf("%d",&n);
float a,b;//先只考虑正整数
int p,q;
float c=0;
int d=0;
while(n--)
{
​    //printf("%d\n",n);
​    //scanf("%d",&a);
​    printf("请输入两个二进制数字：");
​    scanf("%f %f",&a,&b);
​    if(a<1)//输入两个小数的话
​    {
​        q=a*10000;
​        p=b*10000;
​        d=1;
​    }
​    else//输入两个整数的话
​    {
​        q=a;
​        p=b;
​        d=0;
​    }
​    printf("这两个二进制数字转化为十进制为：%d %d\n",turn(q),turn(p));
​    q=turn(q);p=turn(p);
​    if(q>=0 && p>=0)
​    {
​        c=add(q,p);
​    }
​    else if(q>=0 && p<0)
​    {
​        p=-p;
​        c=sub(q,p);
​    }
​    //dectobin(a);
​    //dectobin(b);
​    printf("两个数运算结果用二进制表示为：");
​    if(d==0)
​    {
​        int h=dectobin(c);
​        printf("%d\n",h);
​    }
​    else if(d==1)
​    {
​        float k=dectobin(c);
​        printf("%f\n",k/10000);
​    }
​    //float h=dectobin(c);//输出和的二进制
​    //dectobin(-5);//得出的结果是负数的话 输出的也有减号
​    //printf("%f",m);
}
return 0;

}
